// 仅保留必要的字体颜色（ANSI 转义码）
export enum TextColor {
  // 普通信息：默认白色（兼容多数终端）
  Info = '97',
  // 成功：绿色
  Success = '92',
  // 警告：黄色
  Warn = '93',
  // 错误：红色
  Error = '91',
}

/**
 * 生成带颜色的文本（仅处理字体颜色）
 * @param text 文本内容
 * @param color 字体颜色（来自 TextColor 枚举）
 * @returns 带 ANSI 颜色码的文本
 */
const withColor = (text: string, color: TextColor) => {
  // ANSI 转义序列前缀（兼容大多数终端）
  const prefix = '\u001b';
  // 颜色开启：${prefix}[${color}m，颜色重置：${prefix}[0m
  return `${prefix}[${color}m${text}${prefix}[0m`;
};

/**
 * 输出普通信息（白色）
 * @param messages 要输出的内容（支持多个参数）
 */
export const printInfo = (...messages: any[]) => {
  const content = messages.map((m) => String(m)).join(' ');
  process.stdout.write(withColor(`[INFO] ${content}\n`, TextColor.Info));
};

/**
 * 输出成功信息（绿色）
 * @param messages 要输出的内容（支持多个参数）
 */
export const printSuccess = (...messages: any[]) => {
  const content = messages.map((m) => String(m)).join(' ');
  process.stdout.write(withColor(`[SUCCESS] ${content}\n`, TextColor.Success));
};

/**
 * 输出警告信息（黄色）
 * @param messages 要输出的内容（支持多个参数）
 */
export const printWarn = (...messages: any[]) => {
  const content = messages.map((m) => String(m)).join(' ');
  process.stdout.write(withColor(`[WARN] ${content}\n`, TextColor.Warn));
};

/**
 * 输出错误信息（红色）
 * @param messages 要输出的内容（支持多个参数）
 */
export const printError = (...messages: any[]) => {
  const content = messages.map((m) => String(m)).join(' ');
  process.stdout.write(withColor(`[ERROR] ${content}\n`, TextColor.Error));
};
